package at.donalfonso.kunde;

import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.MessageProducer;
import javax.jms.ObjectMessage;
import javax.jms.Queue;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import at.donalfonso.model.LieferKunde;
import at.donalfonso.ui.group.GruppeThreadJMS;
import at.donalfonso.utility.JMSUtility;

public class KundeThreadJMS extends GruppeThreadJMS implements MessageListener {

	private JMSUtility jmsAsync;
	
	private LieferKunde kunde;
	
	private Logger logger = LoggerFactory.getLogger(this.getClass());
	
	/**
	 * Der Kunde gibt die Bestellung auf und wartet auf die Pizza.
	 */
	public KundeThreadJMS(LieferKunde kunde) {
		super(kunde);
		this.kunde = kunde;
	}
	
	public void run(){
		
		try {
			jmsSync = new JMSUtility(kunde.getFilialID());
			jmsSync.getConnection().start();
			
			// bei Pizzeria "anrufen"
			MessageProducer prodEingang = jmsSync.getSession().createProducer(jmsSync.getQueueEingang());
			ObjectMessage om = jmsSync.getSession().createObjectMessage(kunde);
			
			prodEingang.send(om);
			prodEingang.close();
			
			logger.debug("LieferKunde gesendet");
			
			updateGui(kunde);
			
			if (kunde.adresseExistiert()) {
			
				// auf Lieferung warten
				Queue adr = jmsSync.getSession().createQueue(kunde.getAdresse());
//				String sel1 = "ID = '" + bestellNummer+"'";
//				MessageConsumer consumer = getJMSUtility().getSession().createConsumer(adr, sel1);
				jmsAsync = new JMSUtility(kunde.getFilialID());
				MessageConsumer consumer = jmsAsync.getSession().createConsumer(adr);

				consumer.setMessageListener(this);
			}
			
		} catch (JMSException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}

	@Override
	public void onMessage(Message arg0) {
		System.out.println("Kunde: Pizza erhalten: "+arg0);
		
	}

}
